/*                          UX-Framework                               
 *                                                                 
 *  iZE Co.,Ltd. Copyright 2009 All rights reserved.          
 *  This file is distributed under the terms of the GNU Lesser 
 *  General Public License, described in file LICENSE.
 */
package jp.ize.ux.acts;

/** 
 * Actクラス<br>
 * 動きを表すクラスが利用する基本的なenum, 型, クラスの集合です。<br>
 *
 * @author		iZE Co., Ltd.<br>
 * @version		$Id$<br>
 */
// {{{ imports
import jp.ize.ux.Util;
import jp.ize.ux.UXObject;
import jp.ize.ux.UXPoint;
import jp.ize.ux.UXMouseEvent;
import jp.ize.ux.UXKeyboardEvent;
// }}}
// {{{ enum ActSide {
/**
 * ActSide<br>
 * Transitionで使用されるトランジションの方向を示します。
 */
enum ActSide {
	IN;
	OUT;
	BOTH;
}
// }}}
// {{{ enum ActTransition {
enum ActTransition {
	Linear;
	EaseSine( side : ActSide );
	EaseCubic( side : ActSide );
	EaseQuint( side : ActSide );
	EaseCirc( side : ActSide );
	EaseBack( side : ActSide );
	EaseQuad( side : ActSide );
	EaseQuart( side : ActSide );
	EaseExpo( side : ActSide );
	EaseElastic( side : ActSide );
	EaseBounce( side : ActSide );
}
// }}}
// {{{ typedef BasicStateType =
typedef BasicStateType =
{
	function touch() : Void;
	function detouch() : Void;
	var target : UXObject;
	var mouse : UXMouseEvent;
	var keyboard : UXKeyboardEvent;
}
// }}}
// {{{ typedef ListStateType = { >
typedef ListStateType = { >
	BasicStateType,
	var children : Array<UXObject>;
	var cyclic : Bool;
	function iterator() : Iterator<UXObject>;
}
// }}}
// {{{ class ActParameter
class ActParameter
{
	// {{{ public var time(default, default) : Float
	/**
	 *	Actが完了するまでにかける時間(秒)です。
	 */
	public var time(default, default) : Float;
	// }}}
	// {{{ public var transition : ActTransition
	/**
	 * 移動の方法です。詳細はActTransitionを参照してください。
	 */
	public var transition : ActTransition;
	// }}}
	// {{{ public function new( time : Float, trans : ActTransition) 
	/**
	 * コンストラクタです。
	 */
	public function new( time : Float, trans : ActTransition) 
	{
	}
	// }}}
}
// }}}
// {{{ class ActSubject<E>
/**
 * ActSubjectクラス.<br>
 * (高階関数版)オブザーバーパターンにおける主体。
 */
class ActSubject<E>
{
	// {{{ private var listener : Array<Assoc<String, E -> Void>>;

	private var listener : Array<Assoc<String, E -> Void>>;

	// }}}
	// {{{ public function new()
	/**
	 * コンストラクタ。
	 */
	public function new()
	{
	}
	// }}}
	// {{{ public function addListener( event : String, f : E -> Void )
	/**
	 * オブザーバーを登録する関数。指定されたイベントが発生すると、登録された関数は登録された順番に呼ばれます。
	 */
	public function addListener( event : String, f : E -> Void )
	{
	}
	// }}}
	// {{{ public function removeListener( event : String )
	/**
	 * 指定されたイベントのオブザーバーの登録を全て解除する関数です。
	 */
 	public function removeListener( event : String  )
	{
	}
	// }}}
}
// }}}
